//冒泡排序第3版 
function sort(array) {
  //记录最后一次交换的位置
  let lastExchangeIndex = 0;
  //无序数列的边界，每次比较只需要比到这里为止
  let sortBorder = array.length - 1;
  for(let i = 0; i < array.length - 1; i++) {
    //有序标记，每一轮的初始值都是true
    let isSorted = true;
    for (let j = 0; j < sortBorder; j++) {
      let tmp = 0;
      if (array[j] > array[j+1]) {
        tmp = array[j];
        array[j] = array[j+1];
        array[j+1] = tmp;
        //因为有元素交换，所有不是有序的，标记变为false
        isSorted = false;
        //更新为最后一次交换元素的位置
        lastExchangeIndex = j;
      }
    }
    sortBorder = lastExchangeIndex;
    if (isSorted) {
      break;
    }
  }
}
let array = [3,4,2,1,5,6,7,8];
sort(array);
console.log(array);